package com.hyacinth.queue;

/**
 * 队列工具类
 * <p>队列使用api</p>
 * <br/> add      增加一个元索             如果队列已满，则抛出一个IIIegaISlabEepeplian异常
 * <br/> remove   移除并返回队列头部的元素  如果队列为空，则抛出一个NoSuchElementException异常
 * <br/> element  返回队列头部的元素        如果队列为空，则抛出一个NoSuchElementException异常
 * <br/> offer    添加一个元素并返回true    如果队列已满，则返回false
 * <br/> poll     移除并返问队列头部的元素   如果队列为空，则返回null
 * <br/> peek     返回队列头部的元素        如果队列为空，则返回null
 * <br/> put      添加一个元素              如果队列满，则阻塞
 * <br/> take     移除并返回队列头部的元素   如果队列为空，则阻塞
 * @author zhangfb
 * @version 1.0.0.1
 */
public class QueueUtils {

    private static QueueManager queueMgr = QueueManager.getInstance();

    /**
     * 获取队列对象
     */
    public static Queue get(String name) {
        return queueMgr.getQueue(name);
    }


    /**
     * 获取对列并移除队列中的头元素
     * @param name 队列名称
     * @return 目标队列
     */
    public static Object poll(String name) {
        Queue queue = get(name);
        if (queue == null) {
            return null;
        }
        return queue.poll();
    }

    /**
     * 压入队列末尾元素
     * @param name   队列名称
     * @param value  元素值
     * @return 是否成功
     */
    public synchronized static boolean offer(String name, Object value) {
        Queue queue = get(name);
        if( queue != null ){
            queue.offer(value);
            return true;
        }
        return false;
    }
}
